// pages/cart/component/cart.js
//引入store，建立关联
import {ComponentWithStore} from 'mobx-miniprogram-bindings'
import {useStore} from '@/store/userstore'
import {reqGetCartList,reqUpdateChecked,reqCheckAllCart,reqAddCart,reqDelCart} from '@/api/cart'
//引入点击自动收起滑块功能
import {swipeCellBehavior} from '@/behaviors/swipeCell'
// 从 miniprogram-licia 导入防抖函数
const licia = require('miniprogram-licia');
//引入computed方法实现全选和全不选状态
const computedBehavior = require('miniprogram-computed').behavior;
ComponentWithStore({
  behaviors:[computedBehavior,swipeCellBehavior],
  storeBindings:{
    store:useStore,
    fields:['token'],
  },

  // 组件的属性列表
  properties: {},

  // 组件的初始数据
  data: {
    cartList: [1, 2, 3, 4],
    emptyDes: '还没有添加商品，快去添加吧～'
  },

  //计算属性
  computed:{
    //只能传入形参data
    selectAllStatus(data){
      return (data.cartList.length !== 0 && data.cartList.every(item=>item.isChecked === 1))
    },
    //计算订单总金额
    totalPrice(data){
      let totalPrice = 0
      data.cartList.forEach(item=>{
        if (item.isChecked ===1) {
          totalPrice += item.price*item.count
        }
      })
      return totalPrice
    }
  },

  // 组件的方法列表
  methods: {

    

    //点击去结算按钮去往订单页面
    toOrder(){
      //判断购物车内是否有商品
      if (this.data.totalPrice === 0) {
        wx.toast({title:"还没有购买商品"})
        return
      }
      wx.navigateTo({
        url: '/modules/orderPayModule/pages/order/detail/detail',
      })
    },

    //删除购物车item
    async delCartGoods(event){
      console.log(event);
      //接收传入的参数
      const {id,index} = event.currentTarget.dataset
      //发起弹框提示用户
      const res = await wx.modal({content:'确认删除？'})
      if (res) {
        //将id发送给客户端，删除当前商品
      const res =await reqDelCart(id)
      if (res.code === 200) {
        //更新当前购物车数据
        this.showTipGetList()
      }
      }
    },

    //当商品数量改变时，触发事件
    //debounce函数为防抖函数
     changeBuyNum:licia.debounce(async function(event){
      // console.log(event);
      //解构出需要的数据
      const nowBuy = event.detail //当前输入的值
      let nowCount = 0 //最后计算完成后的商品数量
      const {id,index,oldbuynum} = event.currentTarget.dataset
      //如果输入的值大于200，数量重置为200
      if (nowBuy>200) {
        this.setData({
          [`cartList.${index}`.count] : 200
        })
      }
      //引入正则表达式，判断输入的值是否是合法的
      const reg = /^([1-9]|[1-9]\d|1\d{2}|200)$/
      const flag = reg.test(nowBuy)
      //如果不合法，重制输入框购买数量
      if (!flag||nowBuy<1) {

        this.setData({
          [`cartList.${index}`.count] : oldbuynum
        })
        return
      }
      nowCount = nowBuy- this.data.cartList[index].count
      // 下个流程
      const res = await reqAddCart({goodsId:id,count:nowCount})
      if (res.code === 200) {
        //更改本地值，选中选择框
        // console.log(this.data.cartList[index].count);
        this.setData({
          [`cartList[${index}].count`]:nowBuy,
          [`cartList[${index}].isChecked`]:1
        })
      }
      
      // console.log(res);

    },500),

    // 点击全选框按钮,传入isChecked值
    async selectAllStatus(event){
      //解构当前选中的checked值
      const {detail} = event
      console.log(detail);
      //判断值，传给detail
      let isChecked = detail?1:0
      //调用接口将状态传入
      const res = await reqCheckAllCart(isChecked)
      if (res.code === 200) {
        //不省资源的方法更新数据
        // this.showTipGetList()
        //省资源办法,将detail赋值给深拷贝对象
        //不直接使用SetData，容易影响性能
        const cartList = JSON.parse(JSON.stringify(this.data.cartList))
        cartList.forEach(item=>item.isChecked = isChecked)
        // console.log(newCartList);
        this.setData({
          cartList:cartList
        })
      }
    },
    async updateChecked(event){
      console.log(event);
      //解构数据
      let {id:goodsId,ischecked:isChecked,index} = event.currentTarget.dataset
      //更新商品状态
      // console.log(isChecked);
      isChecked = isChecked=== 1?0:1
    const res = await  reqUpdateChecked(goodsId,isChecked)
      if (res.code === 200) {
        //通过传入的index，选取商品，更改商品属性
        this.setData({
          [`cartList[${index}].isChecked`]: isChecked
        })
      }
    // 不节省资源的写法
    /*
    // console.log(res);
    //当res成功之后，重新获取cartList列表
    if (res.code === 200) {
      this.showTipGetList()
    }
    */
  },

    //展示文案信息同时获取购物车列表数据
    async showTipGetList(){
      //如果没有登录，展示文案
      if (!this.data.token) {
        this.setData({
          cartList:[],
          emptyDes:'您尚未登录，点击登录获取更多权益～'
        })
        return
      } 
        //如果已经登录，执行后续逻辑
        //获取购物车列表
        const res = await reqGetCartList()
        console.log(res);
        if (res.code ===200) {
          this.setData({
            cartList:res.data,
            emptyDes:res.data.length ===0 &&"还没有添加商品，快去添加吧"
          })
        }
        
      
    },
    onShow(){
      // console.log(this.data.token);
      this.showTipGetList()
      //显示隐藏时关闭所有滑块
      this.onSwipeCellCommonClick()
    },
    onHide(){
      //显示隐藏时关闭所有滑块
      this.onSwipeCellCommonClick()
    }
  }
})
